package com.proyecto.core.vista.echo.componentes;

import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

import nextapp.echo2.app.ApplicationInstance;
import nextapp.echo2.app.Button;
import nextapp.echo2.app.ContentPane;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.SplitPane;
import nextapp.echo2.app.event.ActionEvent;
import nextapp.echo2.app.event.ActionListener;
import nextapp.echo2.webcontainer.command.BrowserOpenWindowCommand;

import com.proyecto.core.Utilidades.UtilReflect;
import com.proyecto.core.modelo.echo.constantes.ParametrosIniciales;
import com.proyecto.core.modelo.echo.constantes.TipoBusqueda;
import com.proyecto.core.modelo.excepciones.GeneralException;
import com.proyecto.core.modelo.servicio.interfaces.IServicioTransaccion;
import com.proyecto.core.vista.beans.TransaccionBean;
import com.proyecto.core.vista.echo.base.RowBotoneraTransaccion;
import com.proyecto.core.vista.echo.constantes.AccionVentana;
import com.proyecto.core.vista.echo.constantes.MensajeTipo;
import com.proyecto.core.vista.echo.interfaces.ICPAreaDatos;

import consultas.echo2consultas.SpWindowPane;
import echopointng.table.SortableTableModel;

@SuppressWarnings("serial")
public class WPTransaccion extends SpWindowPane {

	protected ICPAreaDatos areaDatos = null;

	private CPAreaLista areaLista = null;

	private IServicioTransaccion areaServicio = null;

	private WPTransaccionMultiple wpTransMultiple = null;

	private boolean modoNuevo = false;

	private boolean modoEdicion = false;

	private String resultado = "";

	private Object datosDTO = null;

	private ResourceBundle resourceBundle;

	private ResourceBundle mensajeError;

	private ResourceBundle mensajeEtiquetas;

	private SplitPane spPrinicipal;

	private RowBotoneraTransaccion rImecBotonera;

	private SplitPane spAreas;
	
	protected ApplicationInstance ai = ApplicationInstance.getActive();
	
	protected ContentPane cpPrincipal = ApplicationInstance.getActive()
	.getDefaultWindow().getContent();
	
	
	//Definimos los action listener..
	private ActionListener listenerBotonera = new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			// solo debe estar esta isntrucci�n aqui ya que este listener
			// puede ser interceptado por WPTransaccionMultiple
			ejecutarAccion(Integer.parseInt(e.getActionCommand()));
		}
	};
	//Este arrayList debe ser de 5 posiciones..  el primero indica si
	//se puede o no mostrar la seccion y los otros cuatro los permisos IMEC
	 ArrayList<Integer> AIMECTList = new ArrayList<Integer>();
	
	
	/**
	 * Creates a new <code>WPTransaccion</code>.
	 */
	public WPTransaccion(ICPAreaDatos pAreaDatos,
			IServicioTransaccion pAreaServicio, ResourceBundle mensajeError,
			ResourceBundle mensajeEtiquetas,ArrayList<Integer> AIMEC) {
		super();
		// Add design-time configured components.
		initComponents();
		
		this.areaDatos = pAreaDatos;
		this.areaServicio = pAreaServicio;
		this.areaDatos.setWpTransaccion(this);
		this.mensajeError = mensajeError;
		this.mensajeEtiquetas = mensajeEtiquetas;
		this.AIMECTList = AIMEC;
		inicializar();
		rImecBotonera.setAIMECTListBotones(AIMEC);
	}

	private void inicializar() {
		this.setStyleName("DefaultSPWinPane");
		// Configura Area de Datos
		areaDatos.inicializar();
		try {
			areaDatos.setObjetoDTONuevo(areaServicio.obtenerDTOInicianlizado());
		} catch (Exception e) {
			e.printStackTrace();
		}
		// areaDatos.rutinaAccionMostrar();
		// areaDatos.configurarTabla();
		spAreas.setSeparatorPosition(new Extent(areaDatos.getAreaDatosAlto()));
		if (areaDatos.getAreaDatosAncho() > this.getWidth().getValue()) {
			this.setWidth(new Extent(areaDatos.getAreaDatosAncho()));
		}
		if (areaDatos.getAreaDatosAlto() > this.getHeight().getValue()) {
			this.setHeight(new Extent(areaDatos.getAreaDatosAlto()));
		}
		spAreas.add((ContentPane) areaDatos, 0);

		// Configurar Area Lista
		if (areaDatos.getMuestraTabla() && areaDatos.configurarTabla()) {
			areaLista = new CPAreaLista();
			areaLista.generarTabla(areaDatos.getTablaTitulos(), areaDatos
					.getTablaCampos(), areaDatos.getDirectivaOrdenamiento());

			areaLista.getGestionTabla().getTabla().getTabla()
					.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent arg0) {
							areaLista.actualizarFilaActual(arg0);
							ejecutarAccion(AccionVentana.MODO_MOSTRAR);
						}
					});
			//System.out.println("WPTransaccion.ParametrosIniciales.PAGINABLE:: " + ParametrosIniciales.PAGINABLE);
			if(ParametrosIniciales.PAGINABLE.equalsIgnoreCase("REFRESCANDO")){
				areaLista.getGestionTabla().getBtnProximo().addActionListener(listenerProximosRefrescando);
				areaLista.getGestionTabla().getBtnAtras().addActionListener(listenerAnterioresRefrescando);
				//
				areaLista.getGestionTabla().getBtnFiltrar().addActionListener(listenerFiltrandoInfo2);
			}
			
			// areaDatos.setMuestraTabla(false);

			if (areaDatos.getAreaDatosAlto() + areaDatos.getAreaListaAlto() > this.getHeight().getValue()) {
				this.setHeight(new Extent(areaDatos.getAreaDatosAlto() + areaDatos.getAreaListaAlto()));
			}
			if (areaDatos.getAreaDatosAncho() + areaDatos.getAreaListaAncho() > this.getHeight().getValue()) {
				this.setWidth(new Extent(areaDatos.getAreaDatosAncho()+ areaDatos.getAreaListaAncho()));
			}			
			spAreas.add((ContentPane) areaLista, 1);
		}

		// Configura Ventana
		this.setTitle(areaDatos.getTituloVentana());

		// Configura Area de Botones
		rImecBotonera.getBtnInfoSistema().inicializar(
				this.getClass().getName(), areaDatos.getClass().getName(),
				areaDatos.getServicioNombre());

		Button[] listaBotones = rImecBotonera.ObtenerBotones();	
		for (int i = 0; i < listaBotones.length; i++) {
			listaBotones[i].addActionListener(listenerBotonera);
		}

		
		
		if (areaDatos.isActivaBusquedaInicial()) {
			ejecutarAccion(AccionVentana.MODO_CONSULTAR);
		} else {
			ejecutarAccion(AccionVentana.MODO_CANCELAR);
		}
	}

	
	public void removerListener(Button b){
		b.removeActionListener(listenerBotonera);
	}
	
	public void ejecutarAccionMostrarAyuda(){
		ai.enqueueCommand(new BrowserOpenWindowCommand("ayudasOnline/"+areaDatos.getClass().getSimpleName()+"/"+areaDatos.getClass().getSimpleName()+".htm", "Ayuda", "width=800,height=600"));
	}

	public String ejecutarAccion(Integer pAccion) {
		String resultado = "";
		switch (pAccion) {
		case AccionVentana.MODO_INCLUIR:
			ejecutarAccionIncluir();
			break;
		case AccionVentana.MODO_MODIFICAR:
			ejecutarAccionModificar();
			break;
		case AccionVentana.MODO_MOSTRAR:
			ejecutarAccionMostrar();
			break;
		case AccionVentana.MODO_ELIMINAR:
			resultado = ejecutarAccionEliminar();
			break;
		case AccionVentana.MODO_CONSULTAR:
			ejecutarAccionConsultar();
			break;
		case AccionVentana.MODO_ACEPTAR:
			resultado = ejecutarAccionAceptar();
			break;
		case AccionVentana.MODO_CANCELAR:
			ejecutarAccionCancelar();
			break;
		case AccionVentana.MODO_CURSOR:
			ejecutarAccionCursor();
			break;
		case AccionVentana.MODO_SALIR:
			resultado = ejecutarAccionSalir();
			break;
		case AccionVentana.MODO_INFO:
			ejecutarAccionMostrarAyuda();
			break;			
		default:
			break;
		}
		System.err.println();
		return resultado;
	}

	private void ejecutarAccionIncluir() {
		modoNuevo = true;
		modoEdicion = true;
		try {
			if (areaLista == null) {
				datosDTO = areaServicio.obtenerDTOInicianlizado();
				areaDatos.setObjetoDTONuevo(datosDTO);
				//areaDatos.rutinaAccionIncluir();
			} else {
				areaDatos.setObjetoDTONuevo(areaServicio
						.obtenerDTOInicianlizado());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		areaDatos.rutinaHabilitar(modoNuevo);
		configurarBotones(AccionVentana.MODO_INCLUIR);
		areaDatos.rutinaAccionIncluir();
		ejecutarAccion(AccionVentana.MODO_CURSOR); 
	}

	private void ejecutarAccionModificar() {
		modoNuevo = false;
		modoEdicion = true;
		areaDatos.rutinaHabilitar(modoNuevo);
		configurarBotones(AccionVentana.MODO_MODIFICAR);
		areaDatos.rutinaAccionModificar();
		ejecutarAccion(AccionVentana.MODO_CURSOR);
	}

	private void ejecutarAccionMostrar() {
		modoEdicion = false;

		if (areaLista != null)
			areaDatos.setObjetoDTO(areaLista.getObjetoDTO(), true);
		else
			areaDatos.setObjetoDTO(datosDTO, true);
		areaDatos.rutinaDeshabilitar();
		configurarBotones(AccionVentana.MODO_MOSTRAR);		
		areaDatos.rutinaAccionMostrar();
		ejecutarAccion(AccionVentana.MODO_CURSOR);
	}
	
	private String ejecutarAccionEliminar() {
		resultado = "NO";
		String mensajeC = resourceBundle
				.getString("CoreVista.DialogoMensajes.Mensaje.No_Definido");
		if (areaDatos.rutinaAccionEliminarPre()) {
			// TODO verificar si esta bien este resourceBundle.
			mensajeC = resourceBundle
					.getString("CoreVista.DialogoMensajes.Mensaje.Confirmacion.Eliminar");
			String tipoVentana = resourceBundle
					.getString("CoreVista.DialogoMensajes.Titulo.Alerta");
			DialogoMensajes mC = new DialogoMensajes(tipoVentana, mensajeC,
					MensajeTipo.CONFIRMACION);
			mC.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					if (MensajeTipo.COMANDO_ACEPTAR.equals(arg0
							.getActionCommand())) {
						try {
							areaServicio.eliminar(areaDatos.getObjetoDTO(),true);
							areaDatos.rutinaAccionEliminarPost();
							resultado = "";
							ejecutarAccion(AccionVentana.MODO_CONSULTAR);
						} catch (GeneralException e) {
							String tipVent = resourceBundle
									.getString("CoreVista.DialogoMensajes.Titulo.Error");
							String mensaje = resourceBundle
									.getString("CoreVista.DialogoMensajes.Mensaje.No_Definido");
							try {
								mensaje = mensajeError.getString(e
										.getClaveMensaje());
							} catch (RuntimeException e1) {
							}
							DialogoMensajes m = new DialogoMensajes(tipVent,
									mensaje, MensajeTipo.ALERTA);
							cpPrincipal.add(m);
						}
					} else {

					}
				}
			});
			cpPrincipal.add(mC);
		} else {
		}
		return resultado;
	}

	private void ejecutarAccionConsultar() {
		String mensaje = resourceBundle
				.getString("CoreVista.DialogoMensajes.Mensaje.No_Definido");
		modoEdicion = false;
		areaDatos.rutinaDeshabilitar();
		areaDatos.rutinaLimpiar();
		configurarBotones(AccionVentana.MODO_CONSULTAR);
		areaDatos.rutinaAccionConsultar();
		try {
			List listaDatos = null;
			List listaDatosTodos = null;
			if(areaDatos.puedeRealizarBusqueda()){
				if (areaDatos.configurarBusqueda()) {
					
					if(areaLista!=null && ParametrosIniciales.PAGINABLE.equalsIgnoreCase("REFRESCANDO")){
						String [] atributo = areaDatos.getBusquedaAtributos();
						Object [] valor = areaDatos.getBusquedaValores();
						int totalRegistros = areaServicio.buscarCatalogoPorPropiedadCount(atributo, valor, TipoBusqueda.OPE_IGUAL);
						int registrosXPaginas = ParametrosIniciales.FILAS_X_PAGINAS;
						int totalPaginas = (totalRegistros%registrosXPaginas==0)?totalRegistros/registrosXPaginas:(totalRegistros/registrosXPaginas)+1;
						int limiteInferior = 0;
						int limiteSuperior = limiteInferior+registrosXPaginas;
						areaLista.getGestionTabla().setTotalPaginas(totalPaginas);
						areaLista.getGestionTabla().setPaginaActual(totalRegistros>0?1:0);
						listaDatos = areaServicio.buscarCatalogoPorPropiedadPorRangos(atributo, valor, limiteInferior, limiteSuperior, TipoBusqueda.OPE_IGUAL);
					}else{
						listaDatos = areaServicio.buscarCatalogoPorPropiedad(areaDatos.getBusquedaAtributos(), areaDatos.getBusquedaValores(), TipoBusqueda.OPE_IGUAL);
					}
					
				} else {
					if(ParametrosIniciales.PAGINABLE.equalsIgnoreCase("REFRESCANDO")&& areaLista!=null){
						String [] atributo = {"id.ciaopr"};
						Object [] valor = {"1"};
						int totalRegistros = areaServicio.buscarCatalogoPorPropiedadCount(atributo, valor, TipoBusqueda.OPE_IGUAL);
						int registrosXPaginas = ParametrosIniciales.FILAS_X_PAGINAS;
						int totalPaginas = (totalRegistros%registrosXPaginas==0)?totalRegistros/registrosXPaginas:(totalRegistros/registrosXPaginas)+1;
						int limiteInferior = 0;
						int limiteSuperior = limiteInferior+registrosXPaginas;
						areaLista.getGestionTabla().setTotalPaginas(totalPaginas);
						areaLista.getGestionTabla().setPaginaActual(totalRegistros>0?1:0);
						listaDatos = areaServicio.buscarCatalogoPorPropiedadPorRangos(atributo, valor, limiteInferior, limiteSuperior, TipoBusqueda.OPE_IGUAL);
					}else{
						listaDatos = areaServicio.consultarTodos("1");
					}
				}
				//listaDatosTodos = areaServicio.consultarTodos("1"); hace que se cuelgue
			}//EoI
			
			if (listaDatos != null) {
				if (areaLista != null) {
					areaLista.setListaDatos(listaDatos);
					
					//areaLista.setListaDatosTodos(listaDatosTodos);
					areaLista.ordenarPorColumna(0);
				} else {
					if (!areaDatos.isEsObjetoDTOLista()) {
						datosDTO = listaDatos.get(0);
					} else {
						datosDTO = listaDatos;
					}
					if (listaDatos.size() > 0) {
						ejecutarAccion(AccionVentana.MODO_MOSTRAR);
					} else {
						// nada
					}
				}
			}//EoI

		} catch (GeneralException e) {
			if (!areaDatos.isMuestraMensConsultaVacia() && e.getClaveMensaje().indexOf("consultaVacia") != -1) {
				// La consulta esta vacia
				// no se quiere mostrar el mensaje de consulta vacia
				if (areaLista != null) {
					areaLista.setListaDatos(new ArrayList());
				} else {
					datosDTO = null;
				}
				// rImecBotonera.configurarBotones(AccionVentana.MODO_CONSULTAR);

			} else {
				// da un error distinto, puede ser comunicacion etc.
				try {
					mensaje = e.obtenerMensajeCompleto(ApplicationInstance.getActive().getLocale());
				} catch (Exception e1) {
					mensaje = mensaje + e.getClaveMensaje();
				}
				String tipVentana = resourceBundle
						.getString("CoreVista.DialogoMensajes.Titulo.Error");
				DialogoMensajes m = new DialogoMensajes(tipVentana, mensaje,
						MensajeTipo.ALERTA);
				cpPrincipal.add(m);
			}
		}
	}

	private String ejecutarAccionAceptar() {
		String resultado = "NO";
		try {
			if (areaDatos.rutinaAccionAceptarPre()) {
				if (this.modoNuevo) {
					areaServicio.incluir(areaDatos.getObjetoDTO(),true);
				} else {
					areaServicio.modificar(areaDatos.getObjetoDTO(),true);
				}
				resultado = "";
				areaDatos.rutinaAccionAceptarPost();
				ejecutarAccion(AccionVentana.MODO_CONSULTAR);
				try {
					if (!areaDatos.isEsObjetoDTOLista()) {
						Object id = UtilReflect.invocarMetodoGet(areaDatos
								.getObjetoDTO(), "id", new Class[] {});
						Object dto = areaServicio.consultar(id);
						if (areaLista != null) {
							if (areaLista.getGestionTabla().getTabla()
									.getList().size() > 0) {// TODO Verificar si
															// debe ir esta
															// pregunta
								areaLista.setObjetoDTO(dto);
								areaLista.getGestionTabla()
										.mostrarPojoFiltrado(dto);
							}
						}
					} else {
						// nada , buscar el refres de otra manera..
					}
					ejecutarAccion(AccionVentana.MODO_MOSTRAR);
					ejecutarAccion(AccionVentana.MODO_MODIFICAR);
				} catch (Exception e) {
//					e.printStackTrace();
				}

			} else {
				// rutinaAccionAceptarPre no permite grabar
			}
		} catch (GeneralException e) {
			try {
				//resultado = mensajeError.getString(e.getClaveMensaje());
				resultado = e.obtenerMensajeCompleto(ApplicationInstance.getActive().getLocale());
			} catch (Exception excep) {
				resultado = e.obtenerMensajeCompleto(ApplicationInstance.getActive().getLocale());
			}
			String tipoVent = resourceBundle
					.getString("CoreVista.DialogoMensajes.Titulo.Error");
			DialogoMensajes m = new DialogoMensajes(tipoVent, resultado,
					MensajeTipo.ALERTA);
			cpPrincipal.add(m);
		}

		return resultado;
	}

	private void ejecutarAccionCancelar() {
		areaDatos.rutinaDeshabilitar();
		areaDatos.rutinaLimpiar();
		configurarBotones(AccionVentana.MODO_CANCELAR);
		areaDatos.rutinaAccionCancelar();
		if (areaLista != null) {
			if (areaLista.getGestionTabla().getTabla().getPojo() != null) {
				if ((modoEdicion && !modoNuevo) || !modoEdicion) {
					ejecutarAccion(AccionVentana.MODO_MOSTRAR);
				}
			}
		} else if (datosDTO != null) {
			if ((modoEdicion && !modoNuevo) || !modoEdicion) {
				ejecutarAccion(AccionVentana.MODO_MOSTRAR);
			}
		}
	}

	private void ejecutarAccionCursor() {
		areaDatos.rutinaAccionCursor();
	}

	private ActionListener listenerProximosRefrescando = new ActionListener(){
		public void actionPerformed(ActionEvent arg0) {
			String [] atributo = areaDatos.configurarBusqueda()?areaDatos.getBusquedaAtributos(): new String[]{"id.ciaopr"} ;
			Object [] valor =areaDatos.configurarBusqueda()?areaDatos.getBusquedaValores():new Object [] {ParametrosIniciales.CIAOPR}  ;
			System.out.println("areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla(): " + areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla());
			System.out.println("areaLista.getGestionTabla().obtenerDatoParaFiltrar(): " + areaLista.getGestionTabla().obtenerDatoParaFiltrar());
			
			if(areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla()==null
					|| "".equals(areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla())){
				//areaLista.getGestionTabla()
				atributo = new String[]{"id.ciaopr"};
				valor = new Object[]{ParametrosIniciales.CIAOPR};
			}else{
				atributo = new String[]{"id.ciaopr",areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla()};
				valor = new Object[]{ParametrosIniciales.CIAOPR, areaLista.getGestionTabla().obtenerDatoParaFiltrar()};
			}
			
			try{
				List<Object> resultadosFiltrados = new ArrayList<Object>();
				RowPSTabla tabla = areaLista.getGestionTabla();
				int paginaActual = areaLista.getGestionTabla().getPaginaActual();
				int resulXPagina = ParametrosIniciales.FILAS_X_PAGINAS;
				int totalResultados = 0;
				if(areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla()==null
						|| "".equals(areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla())){
					totalResultados = areaServicio.buscarCatalogoPorPropiedadCount(atributo, valor, TipoBusqueda.OPE_IGUAL);
					//resulXPagina = ParametrosIniciales.FILAS_X_PAGINAS;
				}else{
					totalResultados = areaServicio.buscarCatalogoPorPropiedadCount(atributo, valor, TipoBusqueda.LIKE_CONTENGA_A,true);
					//resulXPagina = 1000;
				}
				int totalPaginas = (totalResultados%resulXPagina==0)?totalResultados/resulXPagina:(totalResultados/resulXPagina)+1;

				System.out.println("totalResultados: " + totalResultados);
				System.out.println("resulXPagina: " + resulXPagina);
				System.out.println("totalPaginas: " + totalPaginas);
				if(totalPaginas!=paginaActual){
					int desde = paginaActual*resulXPagina;
					int hasta = (resulXPagina*(paginaActual+1))<=totalResultados?
								(resulXPagina*(paginaActual+1)):totalResultados;
					System.out.println("desde: " + desde);
					System.out.println("hasta: " + hasta);
					if(areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla()==null
										|| "".equals(areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla())){
						resultadosFiltrados = areaServicio.buscarCatalogoPorPropiedadPorRangos(atributo, valor, desde, hasta, TipoBusqueda.OPE_IGUAL);				
					}else{
						resultadosFiltrados = areaServicio.buscarCatalogoPorPropiedadPorRangos(atributo, valor, desde, hasta, TipoBusqueda.LIKE_CONTENGA_A,true);
					}
					
					paginaActual++;
					tabla.setPaginaActual(paginaActual);
					tabla.setTotalPaginas(totalPaginas);
					tabla.cargarTabla(resultadosFiltrados);
					tabla.getTxtPaginaActual().setText(paginaActual+"/"+totalPaginas);
				}
			}catch (Exception e) {
				e.printStackTrace();
			}
		}
	};
	
	private ActionListener listenerAnterioresRefrescando = new ActionListener(){
		public void actionPerformed(ActionEvent arg0) {
			RowPSTabla tabla = areaLista.getGestionTabla();
			int paginaActual = tabla.getPaginaActual();
			String [] atributo = areaDatos.configurarBusqueda()?areaDatos.getBusquedaAtributos(): new String[]{"id.ciaopr"} ;
			Object [] valor =areaDatos.configurarBusqueda()?areaDatos.getBusquedaValores(): new Object[]{ParametrosIniciales.CIAOPR}  ;
			
			//--
			if(areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla()==null
					|| "".equals(areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla())){
				//areaLista.getGestionTabla()
				atributo = new String[]{"id.ciaopr"};
				valor = new Object[]{ParametrosIniciales.CIAOPR};
			}else{
				atributo = new String[]{"id.ciaopr",areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla()};
				valor = new Object[]{ParametrosIniciales.CIAOPR, areaLista.getGestionTabla().obtenerDatoParaFiltrar()};
			}
			
			if(paginaActual>1){
				try{
					int resulXPagina = tabla.getResulXPagina();
					
					int totalResultados = 0;	//areaServicio.buscarCatalogoPorPropiedadCount(atributo, valor, TipoBusqueda.OPE_IGUAL);

					if(areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla()==null
							|| "".equals(areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla())){
						totalResultados = areaServicio.buscarCatalogoPorPropiedadCount(atributo, valor, TipoBusqueda.OPE_IGUAL);
						//resulXPagina = ParametrosIniciales.FILAS_X_PAGINAS;
					}else{
						totalResultados = areaServicio.buscarCatalogoPorPropiedadCount(atributo, valor, TipoBusqueda.LIKE_CONTENGA_A,true);
						//resulXPagina = 1000;
					}
					
					int hasta = paginaActual*resulXPagina>=totalResultados?//Si estoy en la ultima pagina..
							totalResultados-areaLista.getListaDatos().size():resulXPagina*(paginaActual-1);
					int desde = hasta - resulXPagina;
					int totalPaginas = (totalResultados%resulXPagina==0)?totalResultados/resulXPagina:(totalResultados/resulXPagina)+1;
					//List resultadosFiltrados =  //areaServicio.buscarCatalogoPorPropiedadPorRangos(atributo, valor, desde, hasta, TipoBusqueda.OPE_IGUAL);
					List<Object> resultadosFiltrados = new ArrayList<Object>();
					if(areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla()==null
							|| "".equals(areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla())){
						resultadosFiltrados = areaServicio.buscarCatalogoPorPropiedadPorRangos(atributo, valor, desde, hasta, TipoBusqueda.OPE_IGUAL);				
					}else{
						resultadosFiltrados = areaServicio.buscarCatalogoPorPropiedadPorRangos(atributo, valor, desde, hasta, TipoBusqueda.LIKE_CONTENGA_A,true);
					}
					
					paginaActual--;
					tabla.setPaginaActual(paginaActual);
					tabla.setTotalPaginas(totalPaginas);
					tabla.cargarTabla(resultadosFiltrados);
					tabla.getTxtPaginaActual().setText(paginaActual+"/"+totalPaginas);
				}catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	};
	
	
	private ActionListener listenerFiltrandoInfo = new ActionListener(){
		public void actionPerformed(ActionEvent arg0) {
			RowPSTabla tabla = areaLista.getGestionTabla();
			int paginaActual = tabla.getPaginaActual();
			int resulXPagina = tabla.getResulXPagina();
			int totalResultados = 0;
			int hasta = 0;
			int desde = 0;
			int totalPaginas = 0;
			List resultadosPagina = null;

			String textPojo = "";
			List resultadosFiltrados1 = new ArrayList();
			
			String [] atributo = areaDatos.configurarBusqueda()?areaDatos.getBusquedaAtributos(): new String[]{"id.ciaopr"} ;
			Object [] valor =areaDatos.configurarBusqueda()?areaDatos.getBusquedaValores(): new Object[]{ParametrosIniciales.CIAOPR}  ;
			System.out.println("areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla(): " + areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla());
			System.out.println("areaLista.getGestionTabla().obtenerDatoParaFiltrar(): " + areaLista.getGestionTabla().obtenerDatoParaFiltrar());
			//atributo = new String[]{"id.ciaopr",areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla()};
			//valor = new Object[]{ParametrosIniciales.CIAOPR, areaLista.getGestionTabla().obtenerDatoParaFiltrar()};
			if(paginaActual==1){
				//areaLista.getGestionTabla()
			}
			try {
				if(areaLista.getGestionTabla().obtenerDatoParaFiltrar()==null
						|| "".equals(areaLista.getGestionTabla().obtenerDatoParaFiltrar())){
					//areaLista.getGestionTabla()
					atributo = new String[]{"id.ciaopr"};
					valor = new Object[]{ParametrosIniciales.CIAOPR};
					totalResultados = areaServicio.buscarCatalogoPorPropiedadCount(atributo, valor, TipoBusqueda.OPE_IGUAL);
				}else{
					atributo = new String[]{"id.ciaopr",areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla()};
					valor = new Object[]{ParametrosIniciales.CIAOPR, areaLista.getGestionTabla().obtenerDatoParaFiltrar()};
					totalResultados = areaServicio.buscarCatalogoPorPropiedadCount(atributo, valor, TipoBusqueda.LIKE_CONTENGA_A);
				}
				
				totalResultados = areaServicio.buscarCatalogoPorPropiedadCount(atributo, valor, TipoBusqueda.OPE_IGUAL);	
				 
				hasta = paginaActual*resulXPagina>=totalResultados?//Si estoy en la ultima pagina..
						totalResultados-areaLista.getListaDatos().size():resulXPagina*(paginaActual-1);
				desde = hasta - resulXPagina;
				totalPaginas = (totalResultados%resulXPagina==0)?totalResultados/resulXPagina:(totalResultados/resulXPagina)+1;
				List filtrarEnTodaLaTablaTem = null;
				while ( paginaActual <  totalPaginas) {
					//System.out.println("paginaActual:: " + paginaActual);
					System.out.println("desde:: " + desde + " hasta:: " + hasta);
					
					resultadosPagina = areaServicio.buscarCatalogoPorPropiedadPorRangos(atributo, valor, desde, hasta, TipoBusqueda.OPE_IGUAL);
					//System.out.println("resultadosPagina.size():: " + resultadosPagina.size());
					
					if(resultadosPagina.size() == 0){
						
					}else{
						
						filtrarEnTodaLaTablaTem = areaLista.getGestionTabla().filtrarEnTodaLaTabla(resultadosPagina);
						if(filtrarEnTodaLaTablaTem.size() == 0){
							//System.out.println("filtrarEnTodaLaTablaTem.size() :: " + filtrarEnTodaLaTablaTem.size() );
						}else{
							System.out.println("filtrarEnTodaLaTablaTem.size() :: " + filtrarEnTodaLaTablaTem.size() );
							resultadosFiltrados1.add( filtrarEnTodaLaTablaTem );
						}
						
					}
					
					paginaActual++;
					hasta = paginaActual*resulXPagina>=totalResultados?//Si estoy en la ultima pagina..
							totalResultados-areaLista.getListaDatos().size():resulXPagina*(paginaActual-1);
					desde = hasta - resulXPagina;
				}

				System.out.println("***resultadosFiltrados1.size():: " + resultadosFiltrados1.size());

				totalPaginas = (resultadosFiltrados1.size()%resulXPagina==0)?resultadosFiltrados1.size()/resulXPagina:(resultadosFiltrados1.size()/resulXPagina)+1;
				tabla.setPaginaActual(0);
				tabla.setTotalPaginas(totalPaginas);
				tabla.cargarTabla(resultadosFiltrados1);

				//resultadosFiltrados = areaServicio.buscarCatalogoPorPropiedadPorRangos(atributo, valor, desde, hasta, TipoBusqueda.OPE_IGUAL);
				
			} catch (Exception e) {
				// TODO: handle exception
			}
			
			
		}

	};	
	

	private ActionListener listenerFiltrandoInfo2 = new ActionListener(){
		public void actionPerformed(ActionEvent arg0) {
			RowPSTabla tabla = areaLista.getGestionTabla();
			int paginaActual = 1;		//tabla.getPaginaActual();
			int resulXPagina = ParametrosIniciales.FILAS_X_PAGINAS;	//tabla.getResulXPagina();
			int totalResultados = 0;
			int hasta = resulXPagina;
			int desde = 0;
			int totalPaginas = 0;
			List resultadosPagina = null;
			String[] atributoNuevo = null;
			Object [] valorNuevo = null;
			
			String textPojo = "";
			List resultadosFiltrados1 = new ArrayList();
			
			String [] atributo = areaDatos.configurarBusqueda()?areaDatos.getBusquedaAtributos(): new String[]{"id.ciaopr"} ;
			Object [] valor =areaDatos.configurarBusqueda()?areaDatos.getBusquedaValores(): new Object[]{ParametrosIniciales.CIAOPR}  ;
			System.out.println("areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla(): " + areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla());
			System.out.println("areaLista.getGestionTabla().obtenerDatoParaFiltrar(): " + areaLista.getGestionTabla().obtenerDatoParaFiltrar());
			//atributo = new String[]{"id.ciaopr",areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla()};
			//valor = new Object[]{ParametrosIniciales.CIAOPR, areaLista.getGestionTabla().obtenerDatoParaFiltrar()};
			if(areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla()==null
					|| "".equals(areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla())){
				atributo = areaDatos.configurarBusqueda()?areaDatos.getBusquedaAtributos(): new String[]{"id.ciaopr"} ;
				valor =areaDatos.configurarBusqueda()?areaDatos.getBusquedaValores(): new Object[]{ParametrosIniciales.CIAOPR}  ;
				
			}else{
				atributo = areaDatos.getBusquedaAtributos();
				atributoNuevo = new String[atributo.length+1];
				int i=0;
				for( i=0; i< atributo.length ; i++ ){
						atributoNuevo[i] =  atributo[i];
				}
				atributoNuevo[i] = areaLista.getGestionTabla().obtenerCamposSeleccionadoTabla();
				atributo = atributoNuevo;
				

				valor =areaDatos.getBusquedaValores();
				valorNuevo = new Object[valor.length+1];
				
				for( i=0; i< valor.length ; i++ ){
					if(valor[i] instanceof Integer) {
						valorNuevo[i] = ((Integer)valor[i]).intValue();
					}else{
						valorNuevo[i] =  valor[i];	
					}
				}

				valorNuevo[i] = areaLista.getGestionTabla().obtenerDatoParaFiltrar();
				valor = valorNuevo;
			}
			try {
				totalResultados = areaServicio.buscarCatalogoPorPropiedadCount(atributo, valor, TipoBusqueda.LIKE_CONTENGA_A,true);	
				System.out.println("totalResultados: " + totalResultados);
				/*hasta = paginaActual*resulXPagina>=totalResultados?//Si estoy en la ultima pagina..
						totalResultados-areaLista.getListaDatos().size():
						resulXPagina*(paginaActual-1);
				desde = hasta - resulXPagina;*/
				totalPaginas = (totalResultados%resulXPagina==0)?totalResultados/resulXPagina:(totalResultados/resulXPagina)+1;
				
				//System.out.println("desde:: " + desde + " hasta:: " + hasta);
					
				resultadosPagina = areaServicio.buscarCatalogoPorPropiedadPorRangos(atributo, valor, desde, hasta, TipoBusqueda.LIKE_CONTENGA_A, true);
				if(resultadosPagina.size() == 0){
						
				}else{
					tabla.setPaginaActual(paginaActual);
					tabla.setTotalPaginas(totalPaginas);
					tabla.cargarTabla(resultadosPagina);
					tabla.getTxtPaginaActual().setText(paginaActual+"/"+totalPaginas);
				}

			} catch (Exception e) {
				// TODO: handle exception
				System.err.println("e." + e.getMessage());
			}
			
			
		}

	};	
	private String ejecutarAccionSalir() {
		String resultado = "NO";
		if(areaDatos.rutinaAccionSalir()){
			if(areaDatos.rutinaAccionSalirPre()){
				if(wpTransMultiple !=null && !wpTransMultiple.isExpedienteTab()){
					this.getParent().remove(this);
				}else if(wpTransMultiple !=null && wpTransMultiple.isExpedienteTab()){
					getWpTransMultiple().getParent().remove(getWpTransMultiple());
				}else{
					this.getParent().remove(this);
				}
				areaDatos.rutinaAccionSalirPost();
			}
			return resultado = "SI";
		}else{
			//ejecutarAccion(AccionVentana.MODO_CONSULTAR);
			return resultado = "NO";
		}
	}

	public void configurarBotones(int pAccion){
		if (areaLista == null && (pAccion == AccionVentana.MODO_MODIFICAR || pAccion == AccionVentana.MODO_MOSTRAR) ) {
				rImecBotonera.habilitaIncluir(areaDatos.isEsPortada());
		}
		rImecBotonera.configurarBotones(pAccion,AIMECTList);
		areaDatos.configurarBotones(pAccion);
		
	}

	public ResourceBundle getMensajeError() {
		return mensajeError;
	}

	public void setMensajeError(ResourceBundle mensajeError) {
		this.mensajeError = mensajeError;
	}

	public RowBotoneraTransaccion getRImecBotonera() {
		return rImecBotonera;
	}

	public ActionListener getListenerBotonera() {
		return listenerBotonera;
	}

	
	public SplitPane getSpAreas() {
		return spAreas;
	}

	/**
	 * obtiene el area de Datos del WP
	 */
	public ICPAreaDatos getAreaDatos() {
		return areaDatos;
	}

	/**
	 * @return the modoEdicion
	 */
	public boolean isModoEdicion() {
		return modoEdicion;
	}

	/**
	 * @return the modoNuevo
	 */
	public boolean isModoNuevo() {
		return modoNuevo;
	}

	public void activarAreas(Boolean pColocarActiva) {
		spAreas.setEnabled(pColocarActiva);
		if (!pColocarActiva) {
			configurarBotones(AccionVentana.MODO_SALIR);
		} else {
			configurarBotones(AccionVentana.MODO_CANCELAR);
		}
	}

	public TransaccionBean obtenerTransaccionBean(String cpTransaccionNombre) {
		if(wpTransMultiple!=null){
			return wpTransMultiple.obtenerTransaccionBean(cpTransaccionNombre);
		}
		return null;
	}

	public TransaccionBean obtenerTransaccionBean(Integer cpTransaccionPosic) {
		if(wpTransMultiple!=null){
			return wpTransMultiple.obtenerTransaccionBean(cpTransaccionPosic);
		}
		return null;
	}
	
	public void ejecutarAccionMostrarVentana() {
		areaDatos.rutinaAccionMostrarVentana();
	}

	public ResourceBundle getMensajeEtiquetas() {
		return mensajeEtiquetas;
	}

	public void setMensajeEtiquetas(ResourceBundle mensajeEtiquetas) {
		this.mensajeEtiquetas = mensajeEtiquetas;
	}

	public WPTransaccionMultiple getWpTransMultiple() {
		return wpTransMultiple;
	}

	public void setWpTransMultiple(WPTransaccionMultiple wpTransMultiple) {
		this.wpTransMultiple = wpTransMultiple;
	}

	public CPAreaLista getAreaLista() {
		return areaLista;
	}

	public void setAreaLista(CPAreaLista areaLista) {
		this.areaLista = areaLista;
	}

	public IServicioTransaccion getAreaServicio() {
		return areaServicio;
	}

	public void setAreaServicio(IServicioTransaccion areaServicio) {
		this.areaServicio = areaServicio;
	}

	public void setListenerBotonera(ActionListener listenerBotonera) {
		this.listenerBotonera = listenerBotonera;
	}

	public void setRImecBotonera(RowBotoneraTransaccion imecBotonera) {
		rImecBotonera = imecBotonera;
	}

	public ArrayList<Integer> getAIMECTList() {
		return AIMECTList;
	}

	public void setAIMECTList(ArrayList<Integer> list) {
		AIMECTList = list;
	}

	public void setAreaDatos(ICPAreaDatos areaDatos) {
		this.areaDatos = areaDatos;
	}

	/**
	 * Configures initial state of component.
	 * WARNING: AUTO-GENERATED METHOD.
	 * Contents will be overwritten.
	 */
	private void initComponents() {
		resourceBundle = ResourceBundle.getBundle(
				"com.proyecto.core.vista.echo.resource.localization.etiquetas",
				ApplicationInstance.getActive().getLocale());
		this.setWidth(new Extent(570, Extent.PX));
		this.setResizable(false);
		this.setHeight(new Extent(400, Extent.PX));
		spPrinicipal = new SplitPane();
		spPrinicipal.setOrientation(SplitPane.ORIENTATION_VERTICAL_TOP_BOTTOM);
		spPrinicipal.setSeparatorPosition(new Extent(40, Extent.PX));
		add(spPrinicipal);
		rImecBotonera = new RowBotoneraTransaccion();
		spPrinicipal.add(rImecBotonera);
		spAreas = new SplitPane();
		spAreas.setOrientation(SplitPane.ORIENTATION_VERTICAL_TOP_BOTTOM);
		spAreas.setSeparatorPosition(new Extent(90, Extent.PX));
		spPrinicipal.add(spAreas);
	}

}
